#   2021-05-21  19:44   by  炸天帮成员
#   目的：  将字典转换为CLASS的object，并以CLASS的方式获取和修改对象(object)的值。

obj_dict = {
    '0':{
        'ID':0,
        'NAME':'dict_0',
        'CALLED_NUMB':0
        }
}   

class TEST():
    def __init__(self,ID,NAME,CALLED_NUMB):
        self.ID = ID
        self.NAME = NAME
        self.CALLED_NUMB = CALLED_NUMB
    def sub(self):
        global CALL_COUNT_MAX
        self.CALLED_NUMB += 1
        if self.CALLED_NUMB < CALL_COUNT_MAX :
            print(f'{self.NAME} 的 sub()函数 已经被使用 ',self.CALLED_NUMB,' 次')
        else :
            print(f'{self.NAME} 的 sub()函数 已经被使用 ',self.CALLED_NUMB,' 次\n')

obj_dict['0'] = TEST(obj_dict['0']['ID'],obj_dict['0']['NAME'],obj_dict['0']['CALLED_NUMB'])    #   [A0]将字典元素 变为 类的对象（此处为 TEST   object）
OBJ_DICT_ID_MAX = 4 #   实际字典最大顶层内容是4个，但要注意序号是从0开始的
for i in range(1,OBJ_DICT_ID_MAX):
    obj_dict[str(i)] = {'ID':i,'NAME':f'dict_{i}','CALLED_NUMB':0}                              #   新增字典内容                              
    obj_dict[str(i)] = TEST(obj_dict[str(i)]['ID'],obj_dict[str(i)]['NAME'],obj_dict[str(i)]['CALLED_NUMB'])    #   [A0]将字典元素 变为 类的对象（此处为 TEST   object）

CALL_COUNT_MAX = 5  #   设置TEST()类中的sub()的调用次数，为5次
for i in range(0,OBJ_DICT_ID_MAX):
    for j in range(0,CALL_COUNT_MAX):
        obj_dict[str(i)].sub()

print('obj_dict[2].NAME = ',obj_dict['2'].NAME)         #   [B0]
print('obj_dict = ',obj_dict,'\nobj_dict type = ',type(obj_dict)) #   可以看到    obj_dict    这个字典内的元素    ，变为了    类的对象（此处为 TEST   object）    。
#print('obj_dict[2][NAME] = ',obj_dict['2']['NAME'])    #   [Attention!]可以看到    由于[A0]的缘故  ，无法使用字典的形式来获取内容。应该使用[B0]的方式来获取内容，即以类的对象方式。
obj_dict['2'].NAME = 'hanhan_2'
print('obj_dict[2].NAME = ',obj_dict['2'].NAME,'\nobj_dict[2] type = ',type(obj_dict['2']))         #   [B0]
